home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #5 / Amiga Plus CD - 2000 - No. 5.iso / Tools / Dev / fpc / reqtools / units / reqtools.pas
Encoding:
Pascal/Delphi Source File  |  2000-01-01  |  30.6 KB  |  1,022 lines

  1. {
  2.     This file is part of the Free Pascal run time library.
  3.  
  4.     A file in Amiga system run time library.
  5.     Copyright (c) 1998-2000 by Nils Sjoholm
  6.     member of the Amiga RTL development team.
  7.  
  8.     See the file COPYING.FPC, included in this distribution,
  9.     for details about the copyright.
  10.  
  11.     This program is distributed in the hope that it will be useful,
  12.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  14.  
  15.  **********************************************************************}
  16. {
  17.     History:
  18.     Added overlay functions for Pchar->Strings, functions
  19.     and procedures.
  20.     14 Jul 2000.
  21.  
  22.     Added MessageBox for error report.
  23.     31 Jul 2000.
  24.  
  25.     nils.sjoholm@mailbox.swipnet.se
  26. }
  27.  
  28. UNIT REQTOOLS;
  29.  
  30. INTERFACE
  31.  
  32. {$I amigaoverlays.inc}
  33.  
  34. USES Exec, intuition, amigados, diskfont, graphics, utility;
  35.  
  36.  
  37.  
  38. {***********************
  39. *                      *
  40. *     Preferences      *
  41. *                      *
  42. ***********************}
  43.  
  44. CONST   RTPREF_FILEREQ          = 0;
  45.         RTPREF_FONTREQ          = 1;
  46.         RTPREF_PALETTEREQ       = 2;
  47.         RTPREF_SCREENMODEREQ    = 3;
  48.         RTPREF_VOLUMEREQ        = 4;
  49.         RTPREF_OTHERREQ         = 5;
  50.         RTPREF_NR_OF_REQ        = 6;
  51.  
  52. Type
  53.     pReqDefaults = ^tReqDefaults;
  54.     tReqDefaults = Record
  55.         Size       : ULONG;
  56.         ReqPos     : ULONG;
  57.         LeftOffset : WORD;
  58.         TopOffset  : WORD;
  59.         MinEntries : WORD;
  60.         MaxEntries : WORD;
  61.     END;
  62.  
  63.     pReqToolsPrefs = ^tReqToolsPrefs;
  64.     tReqToolsPrefs = Record
  65.     { Size of preferences (_without_ this field and the semaphore) }
  66.         PrefsSize      : ULONG;
  67.         PrefsSemaphore : tSignalSemaphore;
  68.     { Start of real preferences }
  69.         Flags          : ULONG;
  70.         ReqDefaults   : ARRAY [0..RTPREF_NR_OF_REQ-1] OF tReqDefaults;
  71.     END;
  72.  
  73. CONST
  74.      RTPREFS_SIZE = 100;
  75.  
  76. { Flags }
  77.  
  78.      RTPRB_DIRSFIRST       = 0;
  79.      RTPRF_DIRSFIRST       = 1;
  80.      RTPRB_DIRSMIXED       = 1;
  81.      RTPRF_DIRSMIXED       = 2;
  82.      RTPRB_IMMSORT         = 2;
  83.      RTPRF_IMMSORT         = 4;
  84.      RTPRB_NOSCRTOFRONT    = 3;
  85.      RTPRF_NOSCRTOFRONT    = 8;
  86.      RTPRB_NOLED           = 4;
  87.      RTPRF_NOLED           = 16;
  88.      RTPRB_DEFAULTFONT     = 5;
  89.      RTPRF_DEFAULTFONT     = 32;
  90.      RTPRB_DOWHEEL         = 6;
  91.      RTPRF_DOWHEEL         = 64;
  92.      RTPRB_FKEYS           = 7;
  93.      RTPRF_FKEYS           = 128;
  94.      RTPRB_FANCYWHEEL      = 8;
  95.      RTPRF_FANCYWHEEL      = 256;
  96.      RTPRB_MMBPARENT       = 9;
  97.      RTPRF_MMBPARENT       = 512;
  98.  
  99. {***********************
  100. *                      *
  101. *     Library Base     *
  102. *                      *
  103. ***********************}
  104.  
  105. Const
  106.     
  107.     REQTOOLSNAME  : PChar = 'reqtools.library';
  108.     REQTOOLSVERSION = 38;
  109.  
  110. Type
  111.  
  112.     pReqToolsBase = ^tReqToolsBase;
  113.     tReqToolsBase = Record
  114.         LibNode           : pLibrary;
  115.         RTFlags           : Byte;
  116.         Pad               : Array[0..2] of Byte;
  117.         SegList           : BPTR;
  118.  
  119.         { The following library bases may be read and used by your program }
  120.  
  121.         IntuitionBase     : pLibrary;
  122.         GfxBase           : pLibrary;
  123.         DOSBase           : pLibrary;
  124.  
  125.         { Next two library bases are only (and always) valid on Kickstart 2.0!
  126.           (1.3 version of reqtools also initializes these when run on 2.0) }
  127.  
  128.         GadToolsBase      : pLibrary;
  129.         UtilityBase       : pLibrary;
  130.  
  131.         { PRIVATE FIELDS, THESE WILL CHANGE FROM RELEASE TO RELEASE! }
  132.  
  133.         { The RealOpenCnt is for the buffered AvailFonts feature.  Since
  134.           Kickstart 3.0 offers low memory handlers a release of ReqTools for 3.0
  135.           will not use this field and start using the normal OpenCnt again. }
  136.  
  137.         RealOpenCnt       : WORD;
  138.         AvailFontsLock    : WORD;
  139.         AvailFontsHeader : pAvailFontsHeader;
  140.         FontsAssignType   : ULONG;
  141.         FontsAssignLock   : BPTR;
  142.         FontsAssignList   : pAssignList;
  143.         ReqToolsPrefs    : tReqToolsPrefs;
  144.         prefspad          : WORD;
  145.     end;
  146.   
  147.  
  148. Const
  149.  
  150. { types of requesters, for rtAllocRequestA() }
  151.  
  152.     RT_FILEREQ       = 0;
  153.     RT_REQINFO       = 1;
  154.     RT_FONTREQ       = 2;
  155.     { (V38) }
  156.     RT_SCREENMODEREQ = 3;
  157.  
  158. {***********************
  159. *                      *
  160. *    File requester    *
  161. *                      *
  162. ***********************}
  163.  
  164. type
  165.  
  166. { structure _MUST_ be allocated with rtAllocRequest() }
  167.  
  168.     prtFileRequester = ^trtFileRequester;
  169.     trtFileRequester  = Record
  170.          ReqPos      : ULONG;
  171.          LeftOffset  : WORD;
  172.          TopOffset   : WORD;
  173.          Flags       : ULONG;
  174.  
  175.          { OBSOLETE IN V38! DON'T USE! } Hook: pHook;
  176.  
  177.          Dir         : STRPTR;     { READ ONLY! Change with rtChangeReqAttrA()! }
  178.          MatchPat    : STRPTR;     { READ ONLY! Change with rtChangeReqAttrA()! }
  179.          DefaultFont : pTextFont;
  180.          WaitPointer : ULONG;
  181.          { (V38) }
  182.          LockWindow  : ULONG;
  183.          ShareIDCMP  : ULONG;
  184.          IntuiMsgFunc: pHook;
  185.          reserved1   : WORD;
  186.          reserved2   : WORD;
  187.          reserved3   : WORD;
  188.          ReqHeight   : WORD;     { READ ONLY! Use RTFI_Height tag! }
  189.          { Private data follows! HANDS OFF }
  190.     end;
  191.    
  192.  
  193. { returned by rtFileRequestA() if multiselect is enabled,
  194.   free list with rtFreeFileList() }
  195.  
  196.     prtFileList = ^trtFileList;
  197.     trtFileList = Record
  198.          Next    : prtFileList;
  199.          StrLen  : ULONG;        { -1 for directories }
  200.          Name    : STRPTR;
  201.     end;
  202.    
  203. { structure passed to RTFI_FilterFunc callback hook by
  204.    volume requester (see RTFI_VolumeRequest tag) }
  205.  
  206.     prtVolumeEntry = ^trtVolumeEntry;
  207.     trtVolumeEntry = Record
  208.         Type_ : ULONG;           { DLT_DEVICE or DLT_DIRECTORY }
  209.         Name  : STRPTR;
  210.     END;
  211.  
  212. {***********************
  213. *                      *
  214. *    Font requester    *
  215. *                      *
  216. ***********************}
  217.  
  218. { structure _MUST_ be allocated with rtAllocRequest() }
  219.  
  220.     prtFontRequester = ^trtFontRequester;
  221.     trtFontRequester = Record
  222.          ReqPos        : ULONG;
  223.          LeftOffset    : WORD;
  224.          TopOffset     : WORD;
  225.          Flags         : ULONG;
  226.          { OBSOLETE IN V38! DON'T USE! } Hook: pHook;
  227.          Attr          : tTextAttr; { READ ONLY! }
  228.          DefaultFont   : pTextFont;
  229.          WaitPointer   : ULONG;
  230.          { (V38) }
  231.          LockWindow    : ULONG;
  232.          ShareIDCMP    : ULONG;
  233.          IntuiMsgFunc  : pHook;
  234.          reserved1     : WORD;
  235.          reserved2     : WORD;
  236.          reserved3     : WORD;
  237.          ReqHeight     : WORD; { READ ONLY!  Use RTFO_Height tag! }
  238.          { Private data follows! HANDS OFF }
  239.     end;
  240.     
  241.  
  242. {*************************
  243. *                        *
  244. *  ScreenMode requester  *
  245. *                        *
  246. *************************}
  247.  
  248. { structure _MUST_ be allocated with rtAllocRequest() }
  249.  
  250.     prtScreenModeRequester = ^trtScreenModeRequester;
  251.     trtScreenModeRequester = Record
  252.          ReqPos      : ULONG;
  253.          LeftOffset  : WORD;
  254.          TopOffset   : WORD;
  255.          Flags       : ULONG;
  256.          private1    : ULONG;
  257.          DisplayID   : ULONG;  { READ ONLY! }
  258.          DisplayWidth: WORD;    { READ ONLY! }
  259.          DisplayHeight: WORD;   { READ ONLY! }
  260.          DefaultFont : pTextFont;
  261.          WaitPointer : ULONG;
  262.          LockWindow  : ULONG;
  263.          ShareIDCMP  : ULONG;
  264.          IntuiMsgFunc: pHook;
  265.          reserved1   : WORD;
  266.          reserved2   : WORD;
  267.          reserved3   : WORD;
  268.          ReqHeight   : WORD;    { READ ONLY!  Use RTSC_Height tag! }
  269.          DisplayDepth: WORD;    { READ ONLY! }
  270.          OverscanType: WORD;    { READ ONLY! }
  271.          AutoScroll  : ULONG;  { READ ONLY! }
  272.          { Private data follows! HANDS OFF }
  273.     end;
  274.     
  275.  
  276. {***********************
  277. *                      *
  278. *    Requester Info    *
  279. *                      *
  280. ***********************}
  281.  
  282. { for rtEZRequestA(), rtGetLongA(), rtGetStringA() and rtPaletteRequestA(),
  283.    _MUST_ be allocated with rtAllocRequest() }
  284.  
  285.     prtReqInfo = ^trtReqInfo;
  286.     trtReqInfo = Record
  287.          ReqPos      : ULONG;
  288.          LeftOffset  : WORD;
  289.          TopOffset   : WORD;
  290.          Width       : ULONG;        { not for rtEZRequestA() }
  291.          ReqTitle    : STRPTR;         { currently only for rtEZRequestA() }
  292.          Flags       : ULONG;        { currently only for rtEZRequestA() }
  293.          DefaultFont : pTextFont;    { currently only for rtPaletteRequestA() }
  294.          WaitPointer : ULONG;
  295.          { (V38) }
  296.          LockWindow  : ULONG;
  297.          ShareIDCMP  : ULONG;
  298.          IntuiMsgFunc: pHook;
  299.          { structure may be extended in future }
  300.      end;
  301.     
  302.  
  303. {***********************
  304. *                      *
  305. *     Handler Info     *
  306. *                      *
  307. ***********************}
  308.  
  309. { for rtReqHandlerA(), will be allocated for you when you use
  310.    the RT_ReqHandler tag, never try to allocate this yourself! }
  311.  
  312.     prtHandlerInfo = ^trtHandlerInfo;
  313.     trtHandlerInfo = Record
  314.          private1  : ULONG;
  315.          WaitMask  : ULONG;
  316.          DoNotWait : ULONG;
  317.          { Private data follows, HANDS OFF }
  318.     end;
  319.     
  320.  
  321. Const
  322.  
  323. { possible return codes from rtReqHandlerA() }
  324.  
  325.     CALL_HANDLER = $80000000;
  326.  
  327. {*************************************
  328. *                                    *
  329. *                TAGS                *
  330. *                                    *
  331. *************************************}
  332.  
  333.     RT_TagBase = TAG_USER;
  334.  
  335. { *** tags understood by most requester functions *** }
  336.  
  337. RT_Window       = $80000001; { Optional pointer to window }
  338. RT_IDCMPFlags   = $80000002; { idcmp flags requester should abort on (useful for 
  339. IDCMP_DISKINSERTED) }
  340. RT_ReqPos       = $80000003; { position of requester window (see below) - default 
  341. REQPOS_POINTER }
  342. RT_LeftOffset   = $80000004; { signal mask to wait for abort signal }
  343. RT_TopOffset    = $80000005; { topedge offset of requester relative to position 
  344. specified by RT_ReqPos }
  345. RT_PubScrName   = $80000006; { name of public screen to put requester on (Kickstart 
  346. 2.0 only!) }
  347. RT_Screen       = $80000007; { address of screen to put requester on }
  348. RT_ReqHandler   = $80000008; { tagdata must hold the address of (!) an APTR variable }
  349. RT_DefaultFont  = $80000009; { font to use when screen font is rejected, _MUST_ be 
  350. fixed-width font! pTextFont , not pTextAttr ) - default GfxBase^.DefaultFont }
  351.  
  352. RT_WaitPointer  = $8000000A; { boolean to set the standard wait pointer in window - 
  353. default FALSE }
  354. RT_Underscore   = $8000000B; { (V38) char preceding keyboard shortcut characters (will 
  355. be underlined) }
  356. RT_ShareIDCMP   = $8000000C; { (V38) share IDCMP port with window - default FALSE }
  357. RT_LockWindow   = $8000000D; { (V38) lock window and set standard wait pointer - 
  358. default FALSE }
  359. RT_ScreenToFront= $8000000E; { (V38) boolean to make requester's screen pop to front - 
  360. default TRUE }
  361. RT_TextAttr     = $8000000F; { (V38) Requester should use this font - default: screen 
  362. font }
  363. RT_IntuiMsgFunc = $80000010; { (V38) call this hook for every IDCMP message not for 
  364. requester }
  365. RT_Locale       = $80000011; { (V38) Locale ReqTools should use for text }
  366.  
  367. { *** tags specific to rtEZRequestA *** }
  368. RTEZ_ReqTitle   = $80000014; { title of requester window - english default "Request" 
  369. or "Information" }
  370.                              { ($80000015) reserved }
  371. RTEZ_Flags      = $80000016; { various flags (see below) }
  372. RTEZ_DefaultResponse
  373.                 = $80000017; { default response (activated by pressing RETURN) - 
  374. default TRUE }
  375.  
  376.  
  377. { *** tags specific to rtGetLongA *** }
  378. RTGL_Min        = $8000001E; { minimum allowed value - default MININT }
  379. RTGL_Max        = $8000001F; { maximum allowed value - default MAXINT }
  380. RTGL_Width      = $80000020; { suggested width of requester window (in pixels) }
  381. RTGL_ShowDefault= $80000021; { boolean to show the default value - default TRUE }
  382. RTGL_GadFmt     = $80000022; { (V38) string with possible responses - english default 
  383. " _Ok |_Cancel" }
  384. RTGL_GadFmtArgs = $80000023; { (V38) optional arguments for RTGL_GadFmt }
  385. RTGL_Invisible  = $80000024; { (V38) invisible typing - default FALSE }
  386. RTGL_Backfill   = $80000025; { (V38) window backfill - default TRUE }
  387. RTGL_TextFmt    = $80000026; { (V38) optional text above gadget }
  388. RTGL_TextFmtArgs= $80000027; { (V38) optional arguments for RTGS_TextFmt }
  389. RTGL_Flags = RTEZ_Flags;     { (V38) various flags (see below) }
  390.  
  391.  
  392. { *** tags specific to rtGetStringA *** }
  393. RTGS_Width      = RTGL_Width;       { suggested width of requester window (in pixels) 
  394. }
  395. RTGS_AllowEmpty = $80000050;        { allow empty string to be accepted - default 
  396. FALSE }
  397. RTGS_GadFmt     = RTGL_GadFmt;      { (V38) string with possible responses - english 
  398. default " _Ok |_Cancel" }
  399. RTGS_GadFmtArgs = RTGL_GadFmtArgs;  { (V38) optional arguments for RTGS_GadFmt }
  400. RTGS_Invisible  = RTGL_Invisible;   { (V38) invisible typing - default FALSE }
  401. RTGS_Backfill   = RTGL_Backfill;    { (V38) window backfill - default TRUE }
  402. RTGS_TextFmt    = RTGL_TextFmt;     { (V38) optional text above gadget }
  403. RTGS_TextFmtArgs= RTGL_TextFmtArgs; { (V38) optional arguments for RTGS_TextFmt }
  404. RTGS_Flags      = RTEZ_Flags;       { (V38) various flags (see below) }
  405.  
  406.  
  407. { *** tags specific to rtFileRequestA *** }
  408. RTFI_Flags      = $80000028; { various flags (see below) }
  409. RTFI_Height     = $80000029; { suggested height of file requester }
  410. RTFI_OkText     = $8000002A; { replacement text for 'Ok' gadget (max 6 chars) }
  411. RTFI_VolumeRequest=$8000002B;{ (V38) bring up volume requester, tag data holds flags 
  412. (see below) }
  413. RTFI_FilterFunc = $8000002C; { (V38) call this hook for every file in the directory }
  414. RTFI_AllowEmpty = $8000002D; { (V38) allow empty file to be accepted - default FALSE }
  415.  
  416.  
  417. { *** tags specific to rtFontRequestA *** }
  418. RTFO_Flags      = RTFI_Flags;  { various flags (see below) }
  419. RTFO_Height     = RTFI_Height; { suggested height of font requester }
  420. RTFO_OkText     = RTFI_OkText; { replacement text for 'Ok' gadget (max 6 chars) }
  421. RTFO_SampleHeight=$8000003C;   { suggested height of font sample display - default 24 
  422. }
  423. RTFO_MinHeight  = $8000003D;   { minimum height of font displayed }
  424. RTFO_MaxHeight  = $8000003E;   { maximum height of font displayed }
  425. { [($8000003F) to ($80000042) used below] }
  426. RTFO_FilterFunc = RTFI_FilterFunc;{ (V38) call this hook for every font }
  427.  
  428.  
  429. { *** (V38) tags for rtScreenModeRequestA *** }
  430. RTSC_Flags         = RTFI_Flags;{ various flags (see below) }
  431. RTSC_Height        = RTFI_Height;{ suggested height of screenmode requester }
  432. RTSC_OkText        = RTFI_OkText;{ replacement text for 'Ok' gadget (max 6 chars) }
  433. RTSC_PropertyFlags = $8000005A;{ property flags (see also RTSC_PropertyMask) }
  434. RTSC_PropertyMask  = $8000005B;{ property mask - default all bits in 
  435. RTSC_PropertyFlags considered }
  436. RTSC_MinWidth      = $8000005C;{ minimum display width allowed }
  437. RTSC_MaxWidth      = $8000005D;{ maximum display width allowed }
  438. RTSC_MinHeight     = $8000005E;{ minimum display height allowed }
  439. RTSC_MaxHeight     = $8000005F;{ maximum display height allowed }
  440. RTSC_MinDepth      = $80000060;{ minimum display depth allowed }
  441. RTSC_MaxDepth      = $80000061;{ maximum display depth allowed }
  442. RTSC_FilterFunc    = RTFI_FilterFunc;{ call this hook for every display mode id }
  443.  
  444.  
  445. { *** tags for rtChangeReqAttrA *** }
  446. RTFI_Dir = $80000032;{ file requester - set directory }
  447. RTFI_MatchPat = $80000033;{ file requester - set wildcard pattern }
  448. RTFI_AddEntry = $80000034;{ file requester - add a file or directory to the buffer }
  449. RTFI_RemoveEntry = $80000035;{ file requester - remove a file or directory from the 
  450. buffer }
  451. RTFO_FontName = $8000003F;{ font requester - set font name of selected font }
  452. RTFO_FontHeight = $80000040;{ font requester - set font size }
  453. RTFO_FontStyle = $80000041;{ font requester - set font style }
  454. RTFO_FontFlags = $80000042;{ font requester - set font flags }
  455. RTSC_ModeFromScreen = $80000050;{ (V38) screenmode requester - get display attributes 
  456. from screen }
  457. RTSC_DisplayID = $80000051;{ (V38) screenmode requester - set display mode id (32-bit 
  458. extended) }
  459. RTSC_DisplayWidth = $80000052;{ (V38) screenmode requester - set display width }
  460. RTSC_DisplayHeight = $80000053;{ (V38) screenmode requester - set display height }
  461. RTSC_DisplayDepth = $80000054;{ (V38) screenmode requester - set display depth }
  462. RTSC_OverscanType = $80000055;{ (V38) screenmode requester - set overscan type, 0 for 
  463. regular size }
  464. RTSC_AutoScroll = $80000056;{ (V38) screenmode requester - set autoscroll }
  465.  
  466.  
  467. { *** tags for rtPaletteRequestA *** }
  468. { initially selected color - default 1 }
  469.     RTPA_Color = $80000046;
  470.  
  471. { *** tags for rtReqHandlerA *** }
  472. { end requester by software control, set tagdata to REQ_CANCEL, REQ_OK or
  473.   in case of rtEZRequest to the return value }
  474.     RTRH_EndRequest = $800003C;
  475.  
  476. { *** tags for rtAllocRequestA *** }
  477. { no tags defined yet }
  478.  
  479. {************
  480. * RT_ReqPos *
  481. ************}
  482.     REQPOS_POINTER    = 0;
  483.     REQPOS_CENTERWIN  = 1;
  484.     REQPOS_CENTERSCR  = 2;
  485.     REQPOS_TOPLEFTWIN = 3;
  486.     REQPOS_TOPLEFTSCR = 4;
  487.     
  488. {******************
  489. * RTRH_EndRequest *
  490. ******************}
  491.     REQ_CANCEL = 0;
  492.     REQ_OK     = 1;
  493.  
  494. {***************************************
  495. * flags for RTFI_Flags and RTFO_Flags  *
  496. * or filereq->Flags and fontreq->Flags *
  497. ***************************************}
  498.     FREQB_NOBUFFER = 2;
  499.     FREQF_NOBUFFER = 4;
  500.  
  501. {*****************************************
  502. * flags for RTFI_Flags or filereq->Flags *
  503. *****************************************}
  504.     FREQB_MULTISELECT = 0;
  505.     FREQF_MULTISELECT = 1;
  506.     FREQB_SAVE        = 1;
  507.     FREQF_SAVE        = 2;
  508.     FREQB_NOFILES     = 3;
  509.     FREQF_NOFILES     = 8;
  510.     FREQB_PATGAD      = 4;
  511.     FREQF_PATGAD      = 16;
  512.     FREQB_SELECTDIRS  = 12;
  513.     FREQF_SELECTDIRS  = 4096;
  514.  
  515. {*****************************************
  516. * flags for RTFO_Flags or fontreq->Flags *
  517. *****************************************}
  518.     FREQB_FIXEDWIDTH    = 5;
  519.     FREQF_FIXEDWIDTH    = 32;
  520.     FREQB_COLORFONTS    = 6;
  521.     FREQF_COLORFONTS    = 64;
  522.     FREQB_CHANGEPALETTE = 7;
  523.     FREQF_CHANGEPALETTE = 128;
  524.     FREQB_LEAVEPALETTE  = 8;
  525.     FREQF_LEAVEPALETTE  = 256;
  526.     FREQB_SCALE         = 9;
  527.     FREQF_SCALE         = 512;
  528.     FREQB_STYLE         = 10;
  529.     FREQF_STYLE         = 1024;
  530.  
  531. {*****************************************************
  532. * (V38) flags for RTSC_Flags or screenmodereq->Flags *
  533. *****************************************************}
  534.     SCREQB_SIZEGADS      = 13;
  535.     SCREQF_SIZEGADS      = 8192;
  536.     SCREQB_DEPTHGAD      = 14;
  537.     SCREQF_DEPTHGAD      = 16384;
  538.     SCREQB_NONSTDMODES   = 15;
  539.     SCREQF_NONSTDMODES   = 32768;
  540.     SCREQB_GUIMODES      = 16;
  541.     SCREQF_GUIMODES      = 65536;
  542.     SCREQB_AUTOSCROLLGAD = 18;
  543.     SCREQF_AUTOSCROLLGAD = 262144;
  544.     SCREQB_OVERSCANGAD   = 19;
  545.     SCREQF_OVERSCANGAD   = 524288;
  546.  
  547. {*****************************************
  548. * flags for RTEZ_Flags or reqinfo->Flags *
  549. *****************************************}
  550.     EZREQB_NORETURNKEY = 0;
  551.     EZREQF_NORETURNKEY = 1;
  552.     EZREQB_LAMIGAQUAL  = 1;
  553.     EZREQF_LAMIGAQUAL  = 2;
  554.     EZREQB_CENTERTEXT  = 2;
  555.     EZREQF_CENTERTEXT  = 4;
  556.  
  557. {***********************************************
  558. * (V38) flags for RTGL_Flags or reqinfo->Flags *
  559. ***********************************************}
  560.     GLREQB_CENTERTEXT    = EZREQB_CENTERTEXT;
  561.     GLREQF_CENTERTEXT    = EZREQF_CENTERTEXT;
  562.     GLREQB_HIGHLIGHTTEXT = 3;
  563.     GLREQF_HIGHLIGHTTEXT = 8;
  564.  
  565. {***********************************************
  566. * (V38) flags for RTGS_Flags or reqinfo->Flags *
  567. ***********************************************}
  568.     GSREQB_CENTERTEXT    = EZREQB_CENTERTEXT;
  569.     GSREQF_CENTERTEXT    = EZREQF_CENTERTEXT;
  570.     GSREQB_HIGHLIGHTTEXT = GLREQB_HIGHLIGHTTEXT;
  571.     GSREQF_HIGHLIGHTTEXT = GLREQF_HIGHLIGHTTEXT;
  572.  
  573. {*****************************************
  574. * (V38) flags for RTFI_VolumeRequest tag *
  575. *****************************************}
  576.     VREQB_NOASSIGNS   = 0;
  577.     VREQF_NOASSIGNS   = 1;
  578.     VREQB_NODISKS     = 1;
  579.     VREQF_NODISKS     = 2;
  580.     VREQB_ALLDISKS    = 2;
  581.     VREQF_ALLDISKS    = 4;
  582.  
  583. {*
  584.    Following things are obsolete in ReqTools V38.
  585.    DON'T USE THESE IN NEW CODE!
  586. *}
  587.     REQHOOK_WILDFILE  = 0;
  588.     REQHOOK_WILDFONT  = 1;
  589.     FREQB_DOWILDFUNC  = 11;
  590.     FREQF_DOWILDFUNC  = 2048;
  591.  
  592. VAR ReqToolsBase : pLibrary;
  593.     reqtools_exit : Pointer;
  594.  
  595. FUNCTION rtAllocRequestA(typ : ULONG; taglist : pTagItem) : POINTER;
  596. FUNCTION rtChangeReqAttrA(req : POINTER; taglist : pTagItem) : LONGINT;
  597. PROCEDURE rtCloseWindowSafely(win : pWindow);
  598. FUNCTION rtEZRequestA(bodyfmt : PChar; gadfmt : PChar; reqinfo : prtReqInfo; argarray : POINTER; taglist : pTagItem) : ULONG;
  599. FUNCTION rtFileRequestA(filereq : prtFileRequester; filebuf : PChar; title : PChar; taglist : pTagItem) : POINTER;
  600. FUNCTION rtFontRequestA(fontreq : prtFontRequester; title : PChar; taglist : pTagItem) : ULONG;
  601. PROCEDURE rtFreeFileList(filelist : prtFileList);
  602. PROCEDURE rtFreeReqBuffer(req : POINTER);
  603. PROCEDURE rtFreeRequest(req : POINTER);
  604. FUNCTION rtGetLongA(VAR longptr : ULONG; title : PChar; reqinfo : prtReqInfo; taglist : pTagItem) : ULONG;
  605. FUNCTION rtGetStringA(buffer : pCHAR; maxchars : ULONG; title : PChar; reqinfo : prtReqInfo; taglist : pTagItem) : ULONG;
  606. FUNCTION rtGetVScreenSize(screen : pScreen; VAR widthptr : ULONG; VAR heightptr : ULONG) : ULONG;
  607. FUNCTION rtLockWindow(win : pWindow) : POINTER;
  608. FUNCTION rtPaletteRequestA(title : PChar; reqinfo : prtReqInfo; taglist : pTagItem) : LONGINT;
  609. FUNCTION rtReqHandlerA(handlerinfo : prtHandlerInfo; sigs : ULONG; taglist : pTagItem) : ULONG;
  610. FUNCTION rtScreenModeRequestA(screenmodereq : prtScreenModeRequester; title : PChar; taglist : pTagItem) : ULONG;
  611. PROCEDURE rtScreenToFrontSafely(screen : pScreen);
  612. PROCEDURE rtSetReqPosition(reqpos : ULONG; newwindow : pNewWindow; screen : pScreen; window : pWindow);
  613. PROCEDURE rtSetWaitPointer(window : pWindow);
  614. PROCEDURE rtSpread(VAR posarray : ULONG; VAR sizearray : ULONG; length : ULONG; min : ULONG; max : ULONG; num : ULONG);
  615. PROCEDURE rtUnlockWindow(win : pWindow; winlock : POINTER);
  616.  
  617. {$ifdef amiga_overlays}
  618.  
  619. FUNCTION rtEZRequestA(bodyfmt : PChar; gadfmt : String; reqinfo : prtReqInfo; argarray : POINTER; taglist : pTagItem) : ULONG;
  620. FUNCTION rtEZRequestA(bodyfmt : String; gadfmt : PChar; reqinfo : prtReqInfo; argarray : POINTER; taglist : pTagItem) : ULONG;
  621. FUNCTION rtEZRequestA(bodyfmt : String; gadfmt : String; reqinfo : prtReqInfo; argarray : POINTER; taglist : pTagItem) : ULONG;
  622. FUNCTION rtFileRequestA(filereq : prtFileRequester; filebuf : PChar; title : String; taglist : pTagItem) : POINTER;
  623. FUNCTION rtFontRequestA(fontreq : prtFontRequester; title : String; taglist : pTagItem) : ULONG;
  624. FUNCTION rtGetLongA(VAR longptr : ULONG; title : String; reqinfo : prtReqInfo; taglist : pTagItem) : ULONG;
  625. FUNCTION rtGetStringA(buffer : pCHAR; maxchars : ULONG; title : String; reqinfo : prtReqInfo; taglist : pTagItem) : ULONG;
  626. FUNCTION rtPaletteRequestA(title : String; reqinfo : prtReqInfo; taglist : pTagItem) : LONGINT;
  627. FUNCTION rtScreenModeRequestA(screenmodereq : prtScreenModeRequester; title : String; taglist : pTagItem) : ULONG;
  628.  
  629. {$endif}
  630.  
  631. IMPLEMENTATION
  632.  
  633. uses msgbox
  634. {$ifdef amiga_overlays}
  635. ,pastoc
  636. {$endif}
  637. ;
  638.  
  639. FUNCTION rtAllocRequestA(typ : ULONG; taglist : pTagItem) : POINTER;
  640. BEGIN
  641.   ASM
  642.     MOVE.L  A6,-(A7)
  643.     MOVE.L  typ,D0
  644.     MOVEA.L taglist,A0
  645.     MOVEA.L ReqToolsBase,A6
  646.     JSR -030(A6)
  647.     MOVEA.L (A7)+,A6
  648.     MOVE.L  D0,@RESULT
  649.   END;
  650. END;
  651.  
  652. FUNCTION rtChangeReqAttrA(req : POINTER; taglist : pTagItem) : LONGINT;
  653. BEGIN
  654.   ASM
  655.     MOVE.L  A6,-(A7)
  656.     MOVEA.L req,A1
  657.     MOVEA.L taglist,A0
  658.     MOVEA.L ReqToolsBase,A6
  659.     JSR -048(A6)
  660.     MOVEA.L (A7)+,A6
  661.     MOVE.L  D0,@RESULT
  662.   END;
  663. END;
  664.  
  665. PROCEDURE rtCloseWindowSafely(win : pWindow);
  666. BEGIN
  667.   ASM
  668.     MOVE.L  A6,-(A7)
  669.     MOVEA.L win,A0
  670.     MOVEA.L ReqToolsBase,A6
  671.     JSR -150(A6)
  672.     MOVEA.L (A7)+,A6
  673.   END;
  674. END;
  675.  
  676. FUNCTION rtEZRequestA(bodyfmt : PChar; gadfmt : PChar; reqinfo : prtReqInfo; argarray 
  677. : POINTER; taglist : pTagItem) : ULONG;
  678. BEGIN
  679.   ASM
  680.     MOVE.L  A6,-(A7)
  681.     MOVEA.L bodyfmt,A1
  682.     MOVEA.L gadfmt,A2
  683.     MOVEA.L reqinfo,A3
  684.     MOVEA.L argarray,A4
  685.     MOVEA.L taglist,A0
  686.     MOVEA.L ReqToolsBase,A6
  687.     JSR -066(A6)
  688.     MOVEA.L (A7)+,A6
  689.     MOVE.L  D0,@RESULT
  690.   END;
  691. END;
  692.  
  693. FUNCTION rtFileRequestA(filereq : prtFileRequester; filebuf : PChar; title : PChar; 
  694. taglist : pTagItem) : POINTER;
  695. BEGIN
  696.   ASM
  697.     MOVE.L  A6,-(A7)
  698.     MOVEA.L filereq,A1
  699.     MOVEA.L filebuf,A2
  700.     MOVEA.L title,A3
  701.     MOVEA.L taglist,A0
  702.     MOVEA.L ReqToolsBase,A6
  703.     JSR -054(A6)
  704.     MOVEA.L (A7)+,A6
  705.     MOVE.L  D0,@RESULT
  706.   END;
  707. END;
  708.  
  709. FUNCTION rtFontRequestA(fontreq : prtFontRequester; title : PChar; taglist : pTagItem) 
  710. : ULONG;
  711. BEGIN
  712.   ASM
  713.     MOVE.L  A6,-(A7)
  714.     MOVEA.L fontreq,A1
  715.     MOVEA.L title,A3
  716.     MOVEA.L taglist,A0
  717.     MOVEA.L ReqToolsBase,A6
  718.     JSR -096(A6)
  719.     MOVEA.L (A7)+,A6
  720.     MOVE.L  D0,@RESULT
  721.   END;
  722. END;
  723.  
  724. PROCEDURE rtFreeFileList(filelist : prtFileList);
  725. BEGIN
  726.   ASM
  727.     MOVE.L  A6,-(A7)
  728.     MOVEA.L filelist,A0
  729.     MOVEA.L ReqToolsBase,A6
  730.     JSR -060(A6)
  731.     MOVEA.L (A7)+,A6
  732.   END;
  733. END;
  734.  
  735. PROCEDURE rtFreeReqBuffer(req : POINTER);
  736. BEGIN
  737.   ASM
  738.     MOVE.L  A6,-(A7)
  739.     MOVEA.L req,A1
  740.     MOVEA.L ReqToolsBase,A6
  741.     JSR -042(A6)
  742.     MOVEA.L (A7)+,A6
  743.   END;
  744. END;
  745.  
  746. PROCEDURE rtFreeRequest(req : POINTER);
  747. BEGIN
  748.   ASM
  749.     MOVE.L  A6,-(A7)
  750.     MOVEA.L req,A1
  751.     MOVEA.L ReqToolsBase,A6
  752.     JSR -036(A6)
  753.     MOVEA.L (A7)+,A6
  754.   END;
  755. END;
  756.  
  757. FUNCTION rtGetLongA(VAR longptr : ULONG; title : PChar; reqinfo : prtReqInfo; taglist 
  758. : pTagItem) : ULONG;
  759. BEGIN
  760.   ASM
  761.     MOVE.L  A6,-(A7)
  762.     MOVEA.L longptr,A1
  763.     MOVEA.L title,A2
  764.     MOVEA.L reqinfo,A3
  765.     MOVEA.L taglist,A0
  766.     MOVEA.L ReqToolsBase,A6
  767.     JSR -078(A6)
  768.     MOVEA.L (A7)+,A6
  769.     MOVE.L  D0,@RESULT
  770.   END;
  771. END;
  772.  
  773.  
  774. FUNCTION rtGetStringA(buffer : pCHAR; maxchars : ULONG; title : PChar; reqinfo : 
  775. prtReqInfo; taglist : pTagItem) : ULONG;
  776. BEGIN
  777.   ASM
  778.     MOVE.L  A6,-(A7)
  779.     MOVEA.L buffer,A1
  780.     MOVE.L  maxchars,D0
  781.     MOVEA.L title,A2
  782.     MOVEA.L reqinfo,A3
  783.     MOVEA.L taglist,A0
  784.     MOVEA.L ReqToolsBase,A6
  785.     JSR -072(A6)
  786.     MOVEA.L (A7)+,A6
  787.     MOVE.L  D0,@RESULT
  788.   END;
  789. END;
  790.  
  791. FUNCTION rtGetVScreenSize(screen : pScreen; VAR widthptr : ULONG; VAR heightptr : 
  792. ULONG) : ULONG;
  793. BEGIN
  794.   ASM
  795.     MOVE.L  A6,-(A7)
  796.     MOVEA.L screen,A0
  797.     MOVEA.L widthptr,A1
  798.     MOVEA.L heightptr,A2
  799.     MOVEA.L ReqToolsBase,A6
  800.     JSR -120(A6)
  801.     MOVEA.L (A7)+,A6
  802.     MOVE.L  D0,@RESULT
  803.   END;
  804. END;
  805.  
  806. FUNCTION rtLockWindow(win : pWindow) : POINTER;
  807. BEGIN
  808.   ASM
  809.     MOVE.L  A6,-(A7)
  810.     MOVEA.L win,A0
  811.     MOVEA.L ReqToolsBase,A6
  812.     JSR -156(A6)
  813.     MOVEA.L (A7)+,A6
  814.     MOVE.L  D0,@RESULT
  815.   END;
  816. END;
  817.  
  818. FUNCTION rtPaletteRequestA(title : PChar; reqinfo : prtReqInfo; taglist : pTagItem) : 
  819. LONGINT;
  820. BEGIN
  821.   ASM
  822.     MOVE.L  A6,-(A7)
  823.     MOVEA.L title,A2
  824.     MOVEA.L reqinfo,A3
  825.     MOVEA.L taglist,A0
  826.     MOVEA.L ReqToolsBase,A6
  827.     JSR -102(A6)
  828.     MOVEA.L (A7)+,A6
  829.     MOVE.L  D0,@RESULT
  830.   END;
  831. END;
  832.  
  833. FUNCTION rtReqHandlerA(handlerinfo : prtHandlerInfo; sigs : ULONG; taglist : pTagItem) 
  834. : ULONG;
  835. BEGIN
  836.   ASM
  837.     MOVE.L  A6,-(A7)
  838.     MOVEA.L handlerinfo,A1
  839.     MOVE.L  sigs,D0
  840.     MOVEA.L taglist,A0
  841.     MOVEA.L ReqToolsBase,A6
  842.     JSR -108(A6)
  843.     MOVEA.L (A7)+,A6
  844.     MOVE.L  D0,@RESULT
  845.   END;
  846. END;
  847.  
  848. FUNCTION rtScreenModeRequestA(screenmodereq : prtScreenModeRequester; title : PChar; 
  849. taglist : pTagItem) : ULONG;
  850. BEGIN
  851.   ASM
  852.     MOVE.L  A6,-(A7)
  853.     MOVEA.L screenmodereq,A1
  854.     MOVEA.L title,A3
  855.     MOVEA.L taglist,A0
  856.     MOVEA.L ReqToolsBase,A6
  857.     JSR -144(A6)
  858.     MOVEA.L (A7)+,A6
  859.     MOVE.L  D0,@RESULT
  860.   END;
  861. END;
  862.  
  863. PROCEDURE rtScreenToFrontSafely(screen : pScreen);
  864. BEGIN
  865.   ASM
  866.     MOVE.L  A6,-(A7)
  867.     MOVEA.L screen,A0
  868.     MOVEA.L ReqToolsBase,A6
  869.     JSR -138(A6)
  870.     MOVEA.L (A7)+,A6
  871.   END;
  872. END;
  873.  
  874. PROCEDURE rtSetReqPosition(reqpos : ULONG; newwindow : pNewWindow; screen : pScreen; 
  875. window : pWindow);
  876. BEGIN
  877.   ASM
  878.     MOVE.L  A6,-(A7)
  879.     MOVE.L  reqpos,D0
  880.     MOVEA.L newwindow,A0
  881.     MOVEA.L screen,A1
  882.     MOVEA.L window,A2
  883.     MOVEA.L ReqToolsBase,A6
  884.     JSR -126(A6)
  885.     MOVEA.L (A7)+,A6
  886.   END;
  887. END;
  888.  
  889. PROCEDURE rtSetWaitPointer(window : pWindow);
  890. BEGIN
  891.   ASM
  892.     MOVE.L  A6,-(A7)
  893.     MOVEA.L window,A0
  894.     MOVEA.L ReqToolsBase,A6
  895.     JSR -114(A6)
  896.     MOVEA.L (A7)+,A6
  897.   END;
  898. END;
  899.  
  900. PROCEDURE rtSpread(VAR posarray : ULONG; VAR sizearray : ULONG; length : ULONG; min : 
  901. ULONG; max : ULONG; num : ULONG);
  902. BEGIN
  903.   ASM
  904.     MOVE.L  A6,-(A7)
  905.     MOVEA.L posarray,A0
  906.     MOVEA.L sizearray,A1
  907.     MOVE.L  length,D0
  908.     MOVE.L  min,D1
  909.     MOVE.L  max,D2
  910.     MOVE.L  num,D3
  911.     MOVEA.L ReqToolsBase,A6
  912.     JSR -132(A6)
  913.     MOVEA.L (A7)+,A6
  914.   END;
  915. END;
  916.  
  917. PROCEDURE rtUnlockWindow(win : pWindow; winlock : POINTER);
  918. BEGIN
  919.   ASM
  920.     MOVE.L  A6,-(A7)
  921.     MOVEA.L win,A0
  922.     MOVEA.L winlock,A1
  923.     MOVEA.L ReqToolsBase,A6
  924.     JSR -162(A6)
  925.     MOVEA.L (A7)+,A6
  926.   END;
  927. END;
  928.  
  929. {$ifdef amiga_overlays}
  930.  
  931. FUNCTION rtEZRequestA(bodyfmt : PChar; gadfmt : String; reqinfo : prtReqInfo; argarray 
  932. : POINTER; taglist : pTagItem) : ULONG;
  933. BEGIN
  934.     rtEZRequestA := rtEZRequestA(bodyfmt,pas2c(gadfmt),reqinfo,argarray,taglist);
  935. END;
  936.  
  937. FUNCTION rtEZRequestA(bodyfmt : String; gadfmt : PChar; reqinfo : prtReqInfo; argarray 
  938. : POINTER; taglist : pTagItem) : ULONG;
  939. BEGIN
  940.     rtEZRequestA := rtEZRequestA(pas2c(bodyfmt),gadfmt,reqinfo,argarray,taglist);
  941. END;
  942.  
  943. FUNCTION rtEZRequestA(bodyfmt : String; gadfmt : String; reqinfo : prtReqInfo; 
  944. argarray : POINTER; taglist : pTagItem) : ULONG;
  945. BEGIN
  946.     rtEZRequestA := 
  947. rtEZRequestA(pas2c(bodyfmt),pas2c(gadfmt),reqinfo,argarray,taglist);
  948. END;
  949.  
  950. FUNCTION rtFileRequestA(filereq : prtFileRequester; filebuf : PChar; title : String; 
  951. taglist : pTagItem) : POINTER;
  952. BEGIN
  953.     rtFileRequestA := rtFileRequestA(filereq,filebuf,pas2c(title),taglist);
  954. END;
  955.  
  956. FUNCTION rtFontRequestA(fontreq : prtFontRequester; title : String; taglist : 
  957. pTagItem) : ULONG;
  958. BEGIN
  959.     rtFontRequestA := rtFontRequestA(fontreq,pas2c(title),taglist);
  960. END;
  961.  
  962. FUNCTION rtGetLongA(VAR longptr : ULONG; title : String; reqinfo : prtReqInfo; taglist 
  963. : pTagItem) : ULONG;
  964. BEGIN
  965.     rtGetLongA := rtGetLongA(longptr,pas2c(title),reqinfo,taglist);
  966. END;
  967.  
  968. FUNCTION rtGetStringA(buffer : pCHAR; maxchars : ULONG; title : String; reqinfo : 
  969. prtReqInfo; taglist : pTagItem) : ULONG;
  970. BEGIN
  971.     rtGetStringA := rtGetStringA(buffer,maxchars,pas2c(title),reqinfo,taglist);
  972. END;
  973.  
  974. FUNCTION rtPaletteRequestA(title : String; reqinfo : prtReqInfo; taglist : pTagItem) : 
  975. LONGINT;
  976. BEGIN
  977.     rtPaletteRequestA := rtPaletteRequestA(pas2c(title),reqinfo,taglist);
  978. END;
  979.  
  980. FUNCTION rtScreenModeRequestA(screenmodereq : prtScreenModeRequester; title : String; 
  981. taglist : pTagItem) : ULONG;
  982. BEGIN
  983.     rtScreenModeRequestA := rtScreenModeRequestA(screenmodereq,pas2c(title),taglist);
  984. END;
  985.  
  986. {$endif}
  987.  
  988. PROCEDURE CloseReqToolsLibrary;
  989. BEGIN
  990.      ExitProc := reqtools_exit;
  991.      if ReqToolsBase <> nil then begin
  992.         CloseLibrary(ReqToolsBase);
  993.         ReqToolsBase := nil;
  994.      end;
  995. END;
  996.  
  997. const
  998.     VERSION : string[2] = '38';
  999.  
  1000. BEGIN
  1001.     ReqToolsBase := nil;
  1002.     ReqToolsBase := OpenLibrary(REQTOOLSNAME,REQTOOLSVERSION);
  1003.     IF ReqToolsBase <> NIL THEN begin
  1004.         reqtools_exit := ExitProc;
  1005.         ExitProc := @CloseReqToolsLibrary;
  1006.     end else begin
  1007.          MessageBox('FPC Pascal Error',
  1008.                     'Can''t open reqtools.library version ' + 
  1009.                     VERSION +
  1010.                     chr(10) + 
  1011.                     'Deallocating resources and closing down',
  1012.                     'Oops');
  1013.         halt(20);
  1014.     end;
  1015.  
  1016.  
  1017.  
  1018. END. (* UNIT REQTOOLS *)
  1019.  
  1020.  
  1021.  
  1022.